package  code.ws_common_scene.map
{
	import flash.utils.Dictionary;

	/**
	 * 地图cm文件数据源池 
	 * @author qiangchen
	 * 
	 */	
	public class MapModePool
	{
		/** 数据池 */
		private static var _dic:Dictionary = new Dictionary();
		/** 配置文件 */
		private static var _xml:XML;
		/** 当前处理数据的位置 */
		private static var _crtIndex:int = 0;
		/** 需处理数据的总长度 */
		private static var _lens:int = 0;
		/** 全部处理解析完成后的方法 */
		private static var _com:Function;
		
		
		/**
		 * 初始化 
		 * @param xml
		 * @param com
		 */		
		public static function analyze( xml:XML, com:Function ):void
		{
			_com = com;
			_xml = xml;
			_lens = _xml.i.length();
			if( _lens <= 0 ) return;
			
			c( _crtIndex );
		}
		
		
		/**
		 * 单个地图模板数据初始化完毕回调方法 
		 * @param mapid
		 * @param data
		 */		
		private static function reFn( mapid:String, data:XMapMode ):void
		{
			_dic[ mapid ] = data;
			_crtIndex ++;
			if( _crtIndex > _lens - 1 )
			{
				_crtIndex = NaN;
				_lens = NaN;
				_xml = null;
				
				if( _com != null )
				{
					_com.call( null );
					_com = null;
				}
				return;	
			}
			
			// 继续解析下一个
			c( _crtIndex );
		}
		
		
		/**
		 * 解析 
		 * @param index
		 * 
		 */		
		private static function c( index:int ):void
		{
			var xmapMode:XMapMode = new XMapMode( reFn );
			xmapMode.ini( XML( _xml.i[index] ) );
		}
		
		
		/**
		 * 获取地图模板数据 
		 * @param mapid
		 * @return 
		 * 
		 */		
		public static function getMapMode( mapid:String ):XMapMode
		{
			if( mapid == null || mapid == "" ) return null;
			return _dic[mapid];
		}
		
		
		/**
		 * 获取数据池 
		 * @return 
		 * 
		 */		
		public static function get dic():Dictionary
		{
			return _dic;
		}
	}
}